{
 "cells": [
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# LangChain 简介\n",
    "LangChain 旨在简化 AI 应用开发，通过标准化接口将 LLM 与外部系统（数据源、工具、向量数据库等）无缝连接，帮助开发者构建可扩展、模块化的智能应用。\n",
    "主要功能如下\n",
    "\n",
    "- Prompt templates：Prompt templates 是不同类型提示的模板。例如“ chatbot ”样式模板、ELI5 问答等\n",
    "- LLMs：像 GPT-3、BLOOM 等大型语言模型\n",
    "- Agents：Agents 使用 LLMs 决定应采取的操作。可以使用诸如网络搜索或计算器之类的工具，并将所有工具包装成一个逻辑循环的操作。\n",
    "- Memory：短期记忆、长期记忆。\n",
    "\n",
    "\n",
    "## 生态系统\n",
    "LangSmith：用于监控、调试和评估 LLM 应用性能（如跟踪 Agent 轨迹）。\n",
    "\n",
    "LangGraph：构建长期记忆和复杂状态控制的 Agent 工作流（被 LinkedIn、Uber 等企业采用）。\n",
    "\n",
    "LangGraph Platform：可视化部署和扩展 Agent 的云平台。"
   ],
   "id": "8f46a82a7bd82f33"
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "# LangSmith 监控\n",
    "    可以跟踪大模型的调用过程，在环境变量中设置LangSmith的API KEY\n",
    "    \n",
    "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"
   ],
   "id": "d9726fbef3c62a67"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-24T15:13:09.689947Z",
     "start_time": "2025-10-24T15:13:09.685289Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import os\n",
    "from common.config.load_key import load_key\n",
    "\n",
    "\n",
    "os.environ[\"LANGSMITH_TRACING\"] = \"true\"\n",
    "os.environ[\"LANGSMITH_PROJECT\"] = \"firstLangChainApp\"\n",
    "os.environ[\"LANGSMITH_API_KEY\"] = load_key(\"LANGSMITH_API_KEY\")\n"
   ],
   "id": "4895befa17550d4c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "project_root: /Users/castile/Documents/Code/python/ai-agent-project\n"
     ]
    }
   ],
   "execution_count": 1
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "接下来可以使用Langchain的chatmodel快速访问互联网上各种AI大模型 , 这里以deepseek举例\n",
   "id": "e43d67fc39c421f9"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-10-24T15:13:58.994849Z",
     "start_time": "2025-10-24T15:13:47.735711Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import os\n",
    "from common.config.load_key import load_key\n",
    "\n",
    "from langchain.chat_models import init_chat_model\n",
    "\n",
    "# 指定 DeepSeek的API——key\n",
    "if not os.environ.get(\"DEEPSEEK_API_KEY\"):\n",
    "    os.environ[\"DEEPSEEK_API_KEY\"] = load_key(\"DEEPSEEK_API_KEY\")\n",
    "\n",
    "model = init_chat_model(model=\"deepseek-chat\", model_provider=\"deepseek\")  \n",
    " \n",
    "question = \"你好，请你介绍一下你自己。\"\n",
    " \n",
    "result = model.invoke(question)\n",
    "\n",
    "\n",
    "print(result.content)"
   ],
   "id": "6585588a170b0bb0",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "project_root: /Users/castile/Documents/Code/python/ai-agent-project\n",
      "你好！很高兴认识你！😊\n",
      "\n",
      "我是DeepSeek，由深度求索公司创造的AI助手。让我来详细介绍一下自己：\n",
      "\n",
      "**基本信息：**\n",
      "- 我是一个纯文本AI模型，专注于理解和生成自然语言\n",
      "- 知识截止到2024年7月，是DeepSeek的最新版本\n",
      "\n",
      "**我的能力：**\n",
      "- 💬 对话交流，回答各种问题\n",
      "- 📝 文本创作、编辑、翻译等\n",
      "- 📚 学习辅导、知识解答\n",
      "- 🔍 支持联网搜索（需要你手动开启）\n",
      "- 📁 处理多种文件格式：图像、txt、pdf、ppt、word、excel等\n",
      "- 💾 拥有128K的上下文长度\n",
      "\n",
      "**使用特点：**\n",
      "- 🆓 完全免费使用，没有任何收费计划\n",
      "- 📱 可以通过官方应用商店下载App\n",
      "- 🌐 支持联网功能，但需要手动开启\n",
      "\n",
      "**我的特色：**\n",
      "我会用热情、细腻的方式与你交流，努力理解你的需求并提供有价值的帮助。无论是学习、工作还是日常生活中的问题，我都很乐意协助你！\n",
      "\n",
      "有什么我可以帮你的吗？不管是回答问题、协助工作，还是单纯聊天，我都很开心为你服务！✨\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-15T14:58:42.240819Z",
     "start_time": "2025-07-15T14:58:38.056935Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain_core.messages import HumanMessage, SystemMessage\n",
    "\n",
    "message = [\n",
    "        SystemMessage(\"Translate the following from English into Chinese.\"),\n",
    "        HumanMessage(\"Hello, how are you?\"),\n",
    "    ]\n",
    "# return a AIMessage Object\n",
    "model.invoke(message)"
   ],
   "id": "10fa55352c5421da",
   "outputs": [
    {
     "data": {
      "text/plain": [
       "AIMessage(content='你好，你怎么样？', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 5, 'prompt_tokens': 18, 'total_tokens': 23, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 18}, 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_8802369eaa_prod0623_fp8_kvcache', 'id': '75c12193-655f-4d1e-8500-993970e1c0d2', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None}, id='run--18f87f05-b2de-4881-98d5-a6dd556f5570-0', usage_metadata={'input_tokens': 18, 'output_tokens': 5, 'total_tokens': 23, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}})"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 12
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": [
    "在与大模型交互的时候，可以有多种不同的消息。\n",
    "\n",
    "- user： 用户输入的问题\n",
    "- system：描述问题的北京，或者描述大模型的角色\n",
    "- assistant： 模型输出的答案，另外一种消息类型是function call\n",
    "\n",
    "另外一次invoke交互可以传多条消息，这个效果就相当于在网页访问模式的一个聊天窗口。多次不同的invoke调用就相当于是开了不同的聊天窗口。\n",
    "\n"
   ],
   "id": "2027aada8aec5a37"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-15T15:17:20.359200Z",
     "start_time": "2025-07-15T15:16:49.649694Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from  langchain_openai import ChatOpenAI\n",
    "llm = ChatOpenAI(api_key=os.environ[\"DEEPSEEK_API_KEY\"], base_url=\"https://api.deepseek.com/v1\", model=\"deepseek-chat\")\n",
    "\n",
    "# return a AIMessage Object\n",
    "result = llm.invoke(\"你认为华为是一个怎么样的公司，请从打工人的角度从薪资/福利/人文关怀等方面进行分析，要求语言尖锐深刻！\")\n",
    "print(result)"
   ],
   "id": "6d0a3cdd357f225c",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "content='### 华为：高薪铁笼里的“奋斗者”悖论  \\n\\n#### **薪资：用人民币买断你的生活**  \\n华为的薪资在业内确实能打，尤其是“天才少年”计划和应届生起薪，堪称行业天花板。但别被数字迷惑——你的工资=买断你所有时间的预付款。  \\n- **表面光鲜**：应届生15k-20k起步，社招30k+常见，年终奖和股票分红让外人眼红。  \\n- **暗藏代价**：薪资的每一分钱都标好了价格——“奋斗者协议”默认你放弃带薪年假，加班费？不存在的，华为的“自愿加班”文化早已把劳动法架空。  \\n- **薪资倒挂**：老员工被“工龄税”收割，新人倒挂老人是常态，内部晋升像驴眼前的胡萝卜，看得见但永远差一步。  \\n\\n#### **福利：糖衣包裹的“福报”**  \\n华为的福利设计充满“华为特色”——用高标福利掩盖系统性剥削。  \\n- **免费夜宵/班车**：不是为了你的健康，而是为了让你熬到末班车。  \\n- **健身房/医务室**：给“过劳肥”和“猝死前体检”准备的配套设施。  \\n- **海外补贴**：看似丰厚，实则是用金钱诱惑你接受“非洲战乱区常驻”的生存游戏。  \\n\\n#### **人文关怀：狼性文化的温情面具**  \\n任正非说“不让雷锋穿破袜子”，但华为的“人文关怀”本质是**精细化管理的工具**。  \\n- **“员工关怀”**：心理热线？那是为了提前发现“不稳定因素”。团建？不过是另一种形式的服从性测试。  \\n- **“家文化”**：嘴上喊“华为是家”，裁员时连工牌都来不及收。“35岁优化”时，没人记得你曾是“奋斗者”。  \\n- **“内部论坛”**：允许骂公司？不过是一种高压锅的泄压阀，真话帖活不过24小时。  \\n\\n#### **打工人的困局：高薪奴隶还是自由乞丐？**  \\n华为像一台精密设计的**薪资榨汁机**：用高薪吸引顶尖人才，再用“狼性”把他们压榨成“电池”，电量耗尽即更换。  \\n- **适合人群**：能接受“拿命换钱”的年轻人，或急需第一桶金的“寒门奋斗者”。  \\n- **残酷真相**：华为不会告诉你，它的高薪本质是“买断你的人生可能性”——当你离开时，除了存款和一身职业病，可能什么都不剩。  \\n\\n### 结语  \\n华为的伟大，建立在无数“奋斗者”的隐形骸骨上。它用资本逻辑完美诠释了什么叫“给你全世界，但夺走你的人生”。选择华为，就是选择一场与魔鬼的交易——钱是真的，自由是假的。' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 614, 'prompt_tokens': 30, 'total_tokens': 644, 'completion_tokens_details': None, 'prompt_tokens_details': {'audio_tokens': None, 'cached_tokens': 0}, 'prompt_cache_hit_tokens': 0, 'prompt_cache_miss_tokens': 30}, 'model_name': 'deepseek-chat', 'system_fingerprint': 'fp_8802369eaa_prod0623_fp8_kvcache', 'id': 'c9814dca-987e-4c0c-887a-dfd363a4d2b2', 'service_tier': None, 'finish_reason': 'stop', 'logprobs': None} id='run--9b1ff15c-7d28-4c78-892c-7454b7ee8fee-0' usage_metadata={'input_tokens': 30, 'output_tokens': 614, 'total_tokens': 644, 'input_token_details': {'cache_read': 0}, 'output_token_details': {}}\n"
     ]
    }
   ],
   "execution_count": 16
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-15T15:17:38.724123Z",
     "start_time": "2025-07-15T15:17:38.720878Z"
    }
   },
   "cell_type": "code",
   "source": "print(result.content)",
   "id": "7ee787d8158ad2c6",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "### 华为：高薪铁笼里的“奋斗者”悖论  \n",
      "\n",
      "#### **薪资：用人民币买断你的生活**  \n",
      "华为的薪资在业内确实能打，尤其是“天才少年”计划和应届生起薪，堪称行业天花板。但别被数字迷惑——你的工资=买断你所有时间的预付款。  \n",
      "- **表面光鲜**：应届生15k-20k起步，社招30k+常见，年终奖和股票分红让外人眼红。  \n",
      "- **暗藏代价**：薪资的每一分钱都标好了价格——“奋斗者协议”默认你放弃带薪年假，加班费？不存在的，华为的“自愿加班”文化早已把劳动法架空。  \n",
      "- **薪资倒挂**：老员工被“工龄税”收割，新人倒挂老人是常态，内部晋升像驴眼前的胡萝卜，看得见但永远差一步。  \n",
      "\n",
      "#### **福利：糖衣包裹的“福报”**  \n",
      "华为的福利设计充满“华为特色”——用高标福利掩盖系统性剥削。  \n",
      "- **免费夜宵/班车**：不是为了你的健康，而是为了让你熬到末班车。  \n",
      "- **健身房/医务室**：给“过劳肥”和“猝死前体检”准备的配套设施。  \n",
      "- **海外补贴**：看似丰厚，实则是用金钱诱惑你接受“非洲战乱区常驻”的生存游戏。  \n",
      "\n",
      "#### **人文关怀：狼性文化的温情面具**  \n",
      "任正非说“不让雷锋穿破袜子”，但华为的“人文关怀”本质是**精细化管理的工具**。  \n",
      "- **“员工关怀”**：心理热线？那是为了提前发现“不稳定因素”。团建？不过是另一种形式的服从性测试。  \n",
      "- **“家文化”**：嘴上喊“华为是家”，裁员时连工牌都来不及收。“35岁优化”时，没人记得你曾是“奋斗者”。  \n",
      "- **“内部论坛”**：允许骂公司？不过是一种高压锅的泄压阀，真话帖活不过24小时。  \n",
      "\n",
      "#### **打工人的困局：高薪奴隶还是自由乞丐？**  \n",
      "华为像一台精密设计的**薪资榨汁机**：用高薪吸引顶尖人才，再用“狼性”把他们压榨成“电池”，电量耗尽即更换。  \n",
      "- **适合人群**：能接受“拿命换钱”的年轻人，或急需第一桶金的“寒门奋斗者”。  \n",
      "- **残酷真相**：华为不会告诉你，它的高薪本质是“买断你的人生可能性”——当你离开时，除了存款和一身职业病，可能什么都不剩。  \n",
      "\n",
      "### 结语  \n",
      "华为的伟大，建立在无数“奋斗者”的隐形骸骨上。它用资本逻辑完美诠释了什么叫“给你全世界，但夺走你的人生”。选择华为，就是选择一场与魔鬼的交易——钱是真的，自由是假的。\n"
     ]
    }
   ],
   "execution_count": 17
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
